import Layout from '@/layout'

/** 把数据列表生成vue路由 **/
function cearedRoute(list, flag) {
  let routelist = []
  for (let i = 0; i < list.length; i++) {
    const item = list[i]
    if (item.is_route === 1) {
      const obj = {
        path: item.path,
        meta: { title: item.name },
        name: createAlias(item.path),
        component: item.parent_id === 0 ? Layout : loadView(item.path)
      }
      /* 判断是否重定向 */
      if (item.redirect_name && typeof (item.redirect_name) !== 'undefined' && item.redirect_name !== '') {
        obj['redirect'] = item.redirect_name
      }
      /* 判断子路径是否是数组 */
      if (Object.prototype.toString.call(item.children) === '[object Array]' && item.children.length > 0) {
        let num = null
        if (flag != null) {
          num = flag
          num++
        } else {
          num = 0
        }
        const child = cearedRoute(item.children, num)
        if (num >= 1) {
          routelist = routelist.concat(child)
        } else {
          obj.children = child
        }
      }
      routelist.unshift(obj)
    } else if (item.is_route === 2) {
      const obj = {
        path: item.path,
        meta: { title: item.name },
        name: createAlias(item.path),
        component: loadView(item.path)
      }
      routelist.unshift(obj)
    }
  }
  return routelist
}

/** 生成别名 **/
function createAlias(str) {
  return str.replace(/\//g, '_')
}

/** 引入对应的组件文件 **/
function loadView(view) {
  /* 将后台传过来的组件地址改成小写 */
  view = view.toLowerCase()
  /* 判断第一个是不是斜杠，如果不是加上斜杠 */
  if (view.substr(0, 1) !== '/') {
    view += '/' + view
  }
  /* 路由懒加载，如果报错需要下载 syntax-dynamic-import 本系统使用了Babel */
  return () => Promise.resolve(require(`@/views${view}`).default)
}

export {
  cearedRoute
}
